コード:4次関数のグラフ ~matplotlib~
code:ggg.py
import matplotlib.pyplot as plt
import math
import numpy as np
plt.title('y = x^4 +x^2 +1, y=0',fontsize=15)
plt.xlabel('x',fontsize=14)
plt.ylabel('y',fontsize=14)
axの定義がないです
axの定義
ax = fig.add_subplot(111) のやつですか?
このままだと
$ python3 ggg.py
でNameErrorが出るはずです。もし出なかったとしたら、python環境がおかしいか別に動かしているファイルがあるかのとちらかです
まずはとりあえず使えることを目指してみます
code:ggg.py
ax.spines'bottom'.set_position(('data', 0)) ax.spines'left'.set_position(('data', 0)) x = np.arange(-2.5, 2.5, 0.1)
plt.plot(x,x**4 +x**2 +1)
plt.hlines(0,-10,10, "m",linestyle=":")
plt.show()
https://gyazo.com/1a2bac36167124779d7ef9e2d9e497aa
👆グラフが左右対称にならない。なんで??
xの定義域ががおかしい……というわけでもなさそうだなtakker.icon
x = np.arange(-2.5, 2.5, 0.1)で対称になっている
以下を試してみるとわかりそう
定義域を変える
e.g. x = np.arange(-5, 5, 0.1)
いろいろ試してみたけど、やはり非対称でした。u.icon
グラフを変える
e.g. plt.plot(x,x * (x**2 + 1))
plt.plot(x, x*(x**3 + x)+1)でやってみたけど、やはり同じ。。。
https://gyazo.com/d14fdd5776cb11e72d9ee1f5160eaf54
4次関数だと、左右非対称なのでしょうか
$ x(x^3+x)+1= (-x)(((-x)^3+(-x))+1だから$ x=0に対して対称になるはずですtakker.icon
$ x^4+x^2+1も同様
???
$ x^4+x^2+1=(-x)^4+(-x)^2+1だから$ x=0に対して対称
分からないけど、軸の範囲を設定したら、
code:fff.py
plt.xlim(-5,5)
plt.ylim(0,10)
https://gyazo.com/64d5274e26f5403e917c4d98ac88328b
左右対称になった。とりあえずできた。
y軸の範囲に制限をかければいいみたい。分からないけど
plt.xlim(-5,5)だけだとだめ?
👆だけだと、やはり左右非対称だった
ふーむ
これ以上はmatplotlibのAPI referenceを読んでみないとわかりそうにないなtakker.icon そのうち勉強してみるu.iconありがとう
np.arangeの終端はlist内に含まれないのが原因ですねyosider.icon
code:py
In 5: np.arange(-2.5, 2.5, 0.1) array([-2.50000000e+00, -2.40000000e+00, -2.30000000e+00, -2.20000000e+00,
-2.10000000e+00, -2.00000000e+00, -1.90000000e+00, -1.80000000e+00,
-1.70000000e+00, -1.60000000e+00, -1.50000000e+00, -1.40000000e+00,
-1.30000000e+00, -1.20000000e+00, -1.10000000e+00, -1.00000000e+00,
-9.00000000e-01, -8.00000000e-01, -7.00000000e-01, -6.00000000e-01,
-5.00000000e-01, -4.00000000e-01, -3.00000000e-01, -2.00000000e-01,
-1.00000000e-01, 2.22044605e-15, 1.00000000e-01, 2.00000000e-01,
3.00000000e-01, 4.00000000e-01, 5.00000000e-01, 6.00000000e-01,
7.00000000e-01, 8.00000000e-01, 9.00000000e-01, 1.00000000e+00,
1.10000000e+00, 1.20000000e+00, 1.30000000e+00, 1.40000000e+00,
1.50000000e+00, 1.60000000e+00, 1.70000000e+00, 1.80000000e+00,
1.90000000e+00, 2.00000000e+00, 2.10000000e+00, 2.20000000e+00,
2.30000000e+00, 2.40000000e+00])
座標とかを作るときはnp.linspaceを使うのが良いと聞いたことがある気がする
code:py
In 6: np.linspace(-2.5, 2.5, 51) array([-2.5, -2.4, -2.3, -2.2, -2.1, -2. , -1.9, -1.8, -1.7, -1.6, -1.5,
-1.4, -1.3, -1.2, -1.1, -1. , -0.9, -0.8, -0.7, -0.6, -0.5, -0.4,
-0.3, -0.2, -0.1, 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,
0.8, 0.9, 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8,
1.9, 2. , 2.1, 2.2, 2.3, 2.4, 2.5])
対称になる
第3引数が間隔じゃなくて点の個数になるのがちょっと使いにくいけど
51 == int((2.5 - (-2.5)) / 0.1) + 1
https://gyazo.com/55e6bb1608f6e5f32f3a08ee7024f609
タイトルは$ ... $で囲むとTeXの数式を使えるyosider.icon
code:test.py
import matplotlib.pyplot as plt
import math
import numpy as np
# タイトルと軸のラベル
plt.title('$y = x^4 + x^2 + 1, y = 0$', fontsize=15)
plt.xlabel('x', fontsize=14)
plt.ylabel('y', fontsize=14)
# 原点(0,0)を中央下段にもってくる
# ax = plt.gca()
# ax.spines'bottom'.set_position(('data', 0)) # ax.spines'left'.set_position(('data', 0)) # 関数をプロット
x = np.linspace(-2.5, 2.5, 51)
plt.plot(x, x**4 + x**2 + 1)
plt.hlines(0, -10, 10, "m", linestyle=":")
plt.show()